package com.swust.monitorProject.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.swust.monitorProject.entity.QUser;
import com.swust.monitorProject.entity.R;
import com.swust.monitorProject.entity.User;
import com.swust.monitorProject.service.IDeptService;
import com.swust.monitorProject.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;

/**
 * 增删改查
 * @author shuaixin
 * @since 2024-12-24
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private IUserService userService;
    @Autowired
    private IDeptService deptService;
    /**
     *  查询用户信息
     * @param id 根据id 查询用户信息
     * @return 返回一个成功的响应，并将用户信息作为响应体返回给客户端
     */
    @GetMapping("/user")
    public R getUsers(@RequestParam(required = false) Long id) {
        if (id != null) {
            User user = userService.getById(id);
            if (user == null) {
                return R.failed("用户不存在"); // 返回404状态码和错误消息
            }
            return R.ok(user); // 用户存在时返回成功的响应
        } else {
            List<User> users = userService.getAllUsers();
            return R.ok(users); // 返回所有用户信息
        }
    }


    /**
     * 更新用户密码
     * @param user 将接收到的用户数据更新到数据库中
     * @return 返回一个成功的响应，告知客户端数据已成功更新
     */
    @PutMapping("/password")
    public R updatePassword(@RequestBody User user) {
        // 确保 user 和 user.getPassword() 都不为 null
        if (!Objects.nonNull(user) || !Objects.nonNull(user.getPassword())) {
            return R.failed("用户或密码不能为空");
        }
        //更新密码
        boolean updated = userService.updatePassword(user.getUserId(), user.getPassword());
        if (updated) {
            return R.ok("密码更新成功");
        } else {
            return R.failed("密码更新失败");
        }
    }
    /**
     * 创建用户
     * @param user 将接收到的用户数据保存到数据库中
     * @return 返回一个成功的响应，告知客户端数据已成功创建
     */
    @PostMapping
    public R createUser(@RequestBody User user) {
        boolean created = userService.createUser(user);
        if (created) {
            return R.ok("用户创建成功");
        } else {
            return R.failed("用户创建失败");
        }
    }
    /**
     * 删除对应的用户记录
     * @param id 根据id删除数据库中的用户信息。
     * @return 返回一个成功的响应，告知客户端数据已成功删除
     */
    @DeleteMapping("/{id}")
    public R delete(@PathVariable Long id)
    {
        boolean deleted = userService.deleteUser(id);
        if (deleted) {
            return R.ok("用户删除成功");
        } else {
            return R.failed("用户删除失败");
        }
    }

    /**
     * 分页查询，user表左联Dept表
     * @param page
     * @param qUser
     * @return
     */
    @GetMapping("/page")
    public R getUserPage(Page page, QUser qUser)
    {
        return R.ok(deptService.pageUser(page, qUser));
    }

}
